﻿using QldtSdh.DAL.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace QldtSdh.BLL
{
    class BizHocKy
    {
        internal static List<HocKy> GetListHocKy(bool conHoatDong = true)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.HocKyDbSet
                    .Where(e => conHoatDong ? e.DangHoatDong : true)
                    .OrderByDescending(e => e.NamHoc)
                    .ThenByDescending(e => e.SoThuTuHocKy).ToList();
            }
        }

        public static void Add(HocKy hocKy)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var oHocKy = db.HocKyDbSet.Where(e => e.NamHoc == hocKy.NamHoc && e.SoThuTuHocKy == hocKy.SoThuTuHocKy).FirstOrDefault();
                if (oHocKy != null)
                    throw new Exception("Học kỳ đã tồn tại trên hệ thống");
                //obj.MaHocKyGUID = Guid.NewGuid().ToString();
                db.HocKyDbSet.Add(hocKy);
                BizNhatKyHoatDong.LogAndCommitInsert<HocKy>(hocKy, hocKy.MaHocKyGUID, LOAIDOITUONG.HỌC_KỲ, db);
            }
        }

        public static void Update(HocKy hocKy)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var oHocKy = db.HocKyDbSet.Where(e =>
                    e.NamHoc == hocKy.NamHoc &&
                    e.SoThuTuHocKy == hocKy.SoThuTuHocKy &&
                    e.MaHocKyGUID != hocKy.MaHocKyGUID).FirstOrDefault();
                if (oHocKy != null)
                    throw new Exception("Học kỳ đã tồn tại trên hệ thống");
                oHocKy = db.HocKyDbSet.Where(e => e.MaHocKyGUID == hocKy.MaHocKyGUID).FirstOrDefault();
                if (oHocKy == null)
                    throw new Exception("Học kỳ không còn tồn tại trên hệ thống");
                var oldHocKy = new HocKy { MaHocKyGUID = oHocKy.MaHocKyGUID, NamHoc = oHocKy.NamHoc, SoThuTuHocKy = oHocKy.SoThuTuHocKy, DangHoatDong = oHocKy.DangHoatDong };
                oHocKy.NamHoc = hocKy.NamHoc;
                oHocKy.SoThuTuHocKy = hocKy.SoThuTuHocKy;
                oHocKy.DangHoatDong = hocKy.DangHoatDong;
                BizNhatKyHoatDong.LogAndCommitUpdate<HocKy>(oldHocKy, hocKy, oHocKy.MaHocKyGUID, LOAIDOITUONG.HỌC_KỲ, db);
            }
        }

        public static void Delete(HocKy hocKy)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var oHocKy = db.HocKyDbSet.Where(e => e.MaHocKyGUID == hocKy.MaHocKyGUID).FirstOrDefault();
                if (oHocKy == null)
                    throw new Exception("Học kỳ không còn tồn tại trên hệ thống");
                db.HocKyDbSet.Remove(oHocKy);
                BizNhatKyHoatDong.LogAndCommitDelete<HocKy>(oHocKy, oHocKy.MaHocKyGUID, LOAIDOITUONG.HỌC_KỲ, db);
            }
        }

        public static HocKy GetByMaHocKyGUID(string maHocKyGUID, CEMS4UG_DHKHContext db = null)
        {
            if (db == null)
                using (var db2 = CEMS4UG_DHKHContext.GetContext()) { return GetByMaHocKyGUID(maHocKyGUID, db2); }
            else
                return db.HocKyDbSet.Where(e => e.MaHocKyGUID == maHocKyGUID).FirstOrDefault();
        }
    }
}
